package middleware

//
//import (
//	"fmt"
//	"ginblog/utils"
//	"ginblog/utils/errormsg"
//	"github.com/gin-gonic/gin"
//	"github.com/golang-jwt/jwt/v5"
//	"net/http"
//	"strings"
//	"time"
//)
//
//// JwtKey 用于 JWT（JSON Web Token）加密/解密 的秘钥。
//var JwtKey = []byte(utils.JwtKey)
//
//type MyCustomClaims struct { // 自定义要求
//	Username             string `json:"username"`
//	jwt.RegisteredClaims        // v5版本的RegisteredClaims
//}
//
//// SetToken 生成Token
//func SetToken(username string) (string, int) {
//	// v5版本使用RegisteredClaims，过期时间需用jwt.NewNumericDate包装
//	expireTime := jwt.NewNumericDate(time.Now().Add(10 * time.Hour))
//	SetClaims := MyCustomClaims{
//		username,
//		jwt.RegisteredClaims{
//			ExpiresAt: expireTime,                     // 过期时间
//			Issuer:    "GinBlog",                      // 签发者
//			IssuedAt:  jwt.NewNumericDate(time.Now()), // 签发时间
//		},
//	}
//	// 使用HS2签名方法
//	reqClaim := jwt.NewWithClaims(jwt.SigningMethodHS256, SetClaims)
//	token, err := reqClaim.SignedString(JwtKey)
//	if err != nil {
//		return "", errormsg.ERROR
//	}
//	return token, errormsg.SUCCESS
//}
//
//// CheckToken 验证Token
//func CheckToken(token string) (*MyCustomClaims, int) {
//	// 解析token并验证签名
//	tokenObj, err := jwt.ParseWithClaims(token, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {
//		// 验证签名方法是否为HS256
//		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
//			return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
//		}
//		return JwtKey, nil
//	})
//
//	// 处理解析错误
//	if err != nil {
//		return nil, errormsg.ERROR
//	}
//
//	// 验证token有效性并提取claims
//	if claims, ok := tokenObj.Claims.(*MyCustomClaims); ok && tokenObj.Valid {
//		return claims, errormsg.SUCCESS
//	}
//	return nil, errormsg.ERROR
//}
//
//// JwtToken Jwt中间件
//func JwtToken() gin.HandlerFunc {
//	return func(c *gin.Context) {
//		tokenHeader := c.Request.Header.Get("Authorization")
//		code := errormsg.SUCCESS
//
//		if tokenHeader == "" {
//			code = errormsg.ERROR_TOKEN_NOT_EXIST
//			c.JSON(http.StatusOK, gin.H{
//				"code":    code,
//				"message": errormsg.GetErrorMsg(code),
//			})
//			//fmt.Printf("停止在了这里 1\n")
//			c.Abort()
//			return
//		}
//
//		checkToken := strings.SplitN(tokenHeader, " ", 2)
//		if len(checkToken) != 2 || checkToken[0] != "Bearer" {
//			code = errormsg.ERROR_TOKEN_TYPE_WRONG
//			//fmt.Printf("停止在了这里 2\n")
//			c.JSON(http.StatusOK, gin.H{
//				"code":    code,
//				"message": errormsg.GetErrorMsg(code),
//			})
//			c.Abort()
//			return
//		}
//
//		key, tCode := CheckToken(checkToken[1])
//		if tCode != errormsg.SUCCESS {
//			code = errormsg.ERROR_TOKEN_WRONG
//			//fmt.Printf("停止在了这里 3\n")
//			c.JSON(http.StatusOK, gin.H{
//				"code":    code,
//				"message": errormsg.GetErrorMsg(code),
//			})
//			c.Abort()
//			return
//		}
//
//		// 检查token是否过期（v5版本推荐使用Valid()方法）
//		if key.ExpiresAt != nil && time.Now().After(key.ExpiresAt.Time) {
//			code = errormsg.ERROR_TOKEN_RUNTIME
//			//fmt.Printf("停止在了这里 4\n")
//			c.JSON(http.StatusOK, gin.H{
//				"code":    code,
//				"message": errormsg.GetErrorMsg(code),
//			})
//			c.Abort()
//			return
//		}
//
//		c.Set("username", key.Username)
//		c.Next()
//	}
//}
